package org.wechat4j.api.datacube;

import org.wechat4j.exception.MpInvokeException;
import org.wechat4j.model.Response;
import org.wechat4j.model.datacube.UserCumulate;
import org.wechat4j.model.datacube.UserSummary;
import org.wechat4j.utils.ResponseUtils;

import java.util.List;

/**
 * @author bjliuyong
 * @version 1.0
 * @created date 16-11-18
 */
public class UserDataCubeService extends  DataCubeBaseService{

    /**
     * 获取用户增减数据 最大时间跨度 7
     * 最大时间跨度是指一次接口调用时最大可获取数据的时间范围，如最大时间跨度为7是指最多一次性获取7天的数据
     * @param accessToken
     * @param beginDate 获取数据的起始日期，begin_date和end_date的差值需小于“最大时间跨度”（比如最大时间跨度为1时，
     *                  begin_date和end_date的差值只能为0，才能小于1），否则会报错
     * @param endDate 获取数据的结束日期，end_date允许设置的最大值为昨日
     * @return
     */
    public static List<UserSummary> getUserSummary(String beginDate ,String endDate , String accessToken) throws MpInvokeException{
        String content = getData(beginDate, endDate, accessToken ,"getusersummary");
        UserSummaryResponse userSummaryResponse = ResponseUtils.parse( content, UserSummaryResponse.class) ;
        return userSummaryResponse.list;
    }

    /**
     * 获取累计用户数据 最大时间跨度 7
     * 最大时间跨度是指一次接口调用时最大可获取数据的时间范围，如最大时间跨度为7是指最多一次性获取7天的数据
     * @param accessToken
     * @param beginDate 获取数据的起始日期，begin_date和end_date的差值需小于“最大时间跨度”（比如最大时间跨度为1时，
     *                  begin_date和end_date的差值只能为0，才能小于1），否则会报错
     * @param endDate 获取数据的结束日期，end_date允许设置的最大值为昨日
     * @return
     */
    public static List<UserCumulate> getUserCumulate(String beginDate ,String endDate , String accessToken) throws MpInvokeException{
        String content = getData(beginDate, endDate, accessToken ,"getusercumulate");
        UserCumulateResponse cumulateResponse = ResponseUtils.parse(content , UserCumulateResponse.class) ;
        return cumulateResponse.list;
    }


    static class UserSummaryResponse extends Response {
        public List<UserSummary> list ;
    }

    static class UserCumulateResponse extends Response {
        public List<UserCumulate> list ;
    }
}
